x11: When clearing old Drop, emit LEAVE event
authorBenjamin Otte <otte@redhat.com>
Wed, 19 Feb 2020 03:41:28 +0000 (04:41 +0100)
committerBenjamin Otte <otte@redhat.com>
Fri, 21 Feb 2020 17:19:16 +0000 (18:19 +0100)
This can happen when the old DND operation died (like due to a crash or
a broken XWayland compositor.

gdk/x11/gdkdrop-x11.c

index 767adac7ab6c1404bd601b05b992a80c3711778c..c85c17be0fb2ff4b7775beec3a3a30301f2ab0e1 100644 (file)
@@ -503,7 +503,12 @@ xdnd_enter_filter (GdkSurface   *surface,
       return TRUE;
     }
 
-  g_clear_object (&display_x11->current_drop);
+  if (display_x11->current_drop)
+    {
+      if (GDK_X11_DROP (display_x11->current_drop)->enter_emitted)
+        gdk_drop_emit_leave_event (display_x11->current_drop, FALSE, GDK_CURRENT_TIME);
+      g_clear_object (&display_x11->current_drop);
+    }
 
   seat = gdk_display_get_default_seat (display);